En Ruby, la herencia no se trata solo de compartir métodos; se trata de la evolución del estado. Cuando creamos una subclase como KaraokeCancion < Cancion, establecemos una relación "es-un" donde la subclase hereda la estructura de la clase padre mientras refina su identidad.
1. La cadena de inicialización
La super palabra clave es el puente entre generaciones. Dentro de initialize, al llamar super transmite los argumentos al constructor de la clase padre, asegurando que las variables de instancia básicas (@nombre, @artista) se establezcan antes de que la subclase añada su estado específico (@letra).
2. Ampliación de métodos
Sobrescribir un método como to_s nos permite ampliar el comportamiento. Al llamar super dentro de la nueva definición, capturamos la salida de cadena de la clase padre y simplemente agregamos los nuevos datos de la subclase, manteniendo una trayectoria evolutiva limpia.